import router from './router'
import nprogress from 'nprogress'
import 'nprogress/nprogress.css'
import store from '@/store'

// 白名单
const whiteList = ['/login']

// 前置导航守卫: 开启进度条 + 页鉴权
// to 去哪里
// from 从哪儿来
// next 是否放行;如果放行 next() 如果不放行，引导到其他页面 next('路径')

router.beforeEach(async(to, from, next) => {
  // 开启进度条
  nprogress.start()

  // 判断用户是否有token,如果有token
  const token = store.getters.token
  if (token) {
    // 判断用户进入的是否是登录页,如果是登录页,依然引导到首页
    if (to.path === 'login') {
      // 如果是登录页,依然引导到首页
      // 注意点:如果nprogress搭配next方法,如果next('路径'),不会执行后置守卫,也就无法关闭进度条,需要手动关闭
      // 关闭进度条
      nprogress.done()
      next('/')
    } else {
      // 请求登陆用户的基本信息 登陆永和每次页面跳转时都会经过这里
      // 追加逻辑 如果用户已经获取过基本信息 不再获取 没有获取时 才会获取
      if (!store.getters.userId) {
        await store.dispatch('user/getUserInfo')
      }
      // 如果不是登录页,放行,想去哪儿就去哪儿
      next()
    }
  } else {
    // 先判断进入的是不是白名单:判断要去的路由路径是否在白名单
    if (whiteList.includes(to.path)) {
      // 如果是白名单中的路径,放行
      next()
    } else {
      // 关闭进度条
      nprogress.done()
      // 如果不是白名单中的路径,就引导到登录页(既没有token,也不是白名单)
      next('/login')
    }
    next()
  }

  // 注意点:如果写了前置守卫，记得在测试代码之前先暂时写个 next()，放行路由，不然是空白页面，不方便测试
  next()
})

// 后置导航守卫: 关闭进度条
router.afterEach(() => {
  // 关闭进度条
  nprogress.done()
})
